function(_add_interfaces)
  set(LLVM_TARGET_DEFINITIONS PyDMInterfaces.td)
  mlir_tablegen(PyDMOpInterfaces.h.inc -gen-op-interface-decls)
  mlir_tablegen(PyDMOpInterfaces.cpp.inc -gen-op-interface-defs)
  mlir_tablegen(PyDMTypeInterfaces.h.inc -gen-type-interface-decls)
  mlir_tablegen(PyDMTypeInterfaces.cpp.inc -gen-type-interface-defs)
  add_public_tablegen_target(IREEPyDMInterfacesIncGen)
endfunction()

function(_add_dialect)
  set(LLVM_TARGET_DEFINITIONS PyDMOps.td)
  mlir_tablegen(PyDMOps.h.inc -gen-op-decls)
  mlir_tablegen(PyDMOps.cpp.inc -gen-op-defs)
  mlir_tablegen(PyDMTypes.h.inc -gen-typedef-decls)
  mlir_tablegen(PyDMTypes.cpp.inc -gen-typedef-defs)
  mlir_tablegen(PyDMDialect.h.inc -gen-dialect-decls -dialect=iree_pydm)
  mlir_tablegen(PyDMDialect.cpp.inc -gen-dialect-defs -dialect=iree_pydm)
  add_public_tablegen_target(IREEPyDMIncGen)
  add_dependencies(IREEPyDMIncGen IREEPyDMInterfacesIncGen)
  add_dependencies(mlir-headers IREEPyDMIncGen)
endfunction()

_add_dialect()
_add_interfaces()
